{"version":3,"file":"map.99c4990c.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/maps/components/MapContext.tsx","webpack://@finviz/website/./js/app/maps/components/Search.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Expand.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Share.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Topbar.tsx","webpack://@finviz/website/./js/app/maps/hooks/use-map-data.ts","webpack://@finviz/website/./js/app/maps/hooks/use-map-type.ts","webpack://@finviz/website/./js/app/maps/components/MapTypeList.tsx","webpack://@finviz/website/./js/app/maps/App.tsx","webpack://@finviz/website/./js/app/maps/treemap-canvas.tsx","webpack://@finviz/website/./js/app/maps/treemap-small.tsx","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/components/Share.tsx","webpack://@finviz/website/./js/app/shared/drawShareMap.ts","webpack://@finviz/website/./js/app/shared/parseJSONFromScript.ts","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/loading.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts"],"sourcesContent":["import * as React from 'react'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { Loading } from '../../../main/components/loading'\r\nimport { QueryClientContext } from '../../shared/components/QueryClientContext'\r\nimport { MapContextProvider } from './Map'\r\n\r\nexport function MapContext(props: React.PropsWithChildren) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n {props.children}\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonHTMLProps, ButtonProps } from '../../../main/components/button'\r\nimport { Input, InputHTMLProps, InputProps } from '../../../main/components/input'\r\nimport MapActionCreators from '../store/action-creators'\r\nimport { MapDataNode } from '../types'\r\nimport { useMapContext } from './Map'\r\n\r\nfunction filterItems(stocks: MapDataNode[] = [], input: string) {\r\n return stocks\r\n .filter(function (stock) {\r\n return stock.name.indexOf(input) === 0 || (stock.description || '').toUpperCase().indexOf(input) === 0\r\n })\r\n .sort(function (a, b) {\r\n if (a.name === b.name) {\r\n return 0\r\n }\r\n return a.name < b.name ? -1 : 1\r\n })\r\n .slice(0, 10)\r\n}\r\n\r\nexport function useSearch() {\r\n const { treemap } = useMapContext()\r\n const [value, setValue] = React.useState('')\r\n const [results, setResults] = React.useState(filterItems(treemap?.nodes, ''))\r\n\r\n React.useEffect(() => {\r\n if (treemap) {\r\n setResults(filterItems(treemap.nodes, ''))\r\n setValue('')\r\n }\r\n }, [treemap])\r\n\r\n const onInputChange = React.useCallback(\r\n (event: React.ChangeEvent) => {\r\n const input = event.target.value.toUpperCase()\r\n setValue(input)\r\n setResults(filterItems(treemap?.nodes, input))\r\n },\r\n [treemap]\r\n )\r\n\r\n const onItemClick = React.useCallback(\r\n (node: MapDataNode) => {\r\n if (!treemap) return\r\n\r\n const cx = (node.x + node.x + node.dx) / 2,\r\n cy = (node.y + node.y + node.dy) / 2,\r\n diffX = cx - treemap.width / 2,\r\n diffY = cy - treemap.height / 2\r\n\r\n MapActionCreators.zoomAndTranslate(treemap, treemap.getLastZoomLevel(), cx + diffX, cy + diffY)\r\n MapActionCreators.setHoveredNode(treemap.mapNodeId, node)\r\n },\r\n [treemap]\r\n )\r\n\r\n const onResultMouseLeave = React.useCallback(() => {\r\n if (!treemap) return\r\n MapActionCreators.setHoveredNode(treemap.mapNodeId, undefined)\r\n }, [treemap])\r\n\r\n return {\r\n value,\r\n results,\r\n onInputChange,\r\n onItemClick,\r\n onResultMouseLeave,\r\n }\r\n}\r\n\r\nexport function SearchInput(props: InputProps & Omit) {\r\n return (\r\n \r\n )\r\n}\r\n\r\ninterface SearchResultProps extends ButtonProps, Omit {\r\n result: MapDataNode\r\n onClick: (node: MapDataNode) => void\r\n onMouseLeave: (e: React.MouseEvent) => void\r\n}\r\n\r\nexport function SearchResult({ result, onClick, onMouseLeave, ...props }: Omit) {\r\n return (\r\n
  • \r\n onClick(result)}\r\n >\r\n {result.name}\r\n {result.description}\r\n \r\n
  • \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button } from '../../../../main/components/button'\r\nimport { isIpad, isMobile } from '../../../shared/isMobile'\r\nimport { EXPANDED_MAP_BODY_CLASSS } from '../../constants/constants'\r\nimport mapActionCreators from '../../store/action-creators'\r\nimport { MapDataRoot } from '../../types'\r\nimport * as mapUtils from '../../utils'\r\nimport { useMapContext } from '../Map'\r\n\r\ninterface ExpandProps {\r\n data?: MapDataRoot\r\n className?: string\r\n}\r\n\r\nexport function Expand(props: ExpandProps) {\r\n const { treemap, generator } = useMapContext()\r\n\r\n const onExpand = React.useCallback(() => {\r\n if (!treemap || !generator || !props.data) return\r\n\r\n if (document.body.classList.contains(EXPANDED_MAP_BODY_CLASSS)) {\r\n document.body.classList.remove(EXPANDED_MAP_BODY_CLASSS)\r\n } else {\r\n window.gtag?.('event', 'map-expand', { event_category: 'maps' })\r\n document.body.classList.add(EXPANDED_MAP_BODY_CLASSS)\r\n }\r\n\r\n const containerElement = document.getElementById('body')\r\n const size = mapUtils.getSize(containerElement, treemap.type, treemap.isSmall)\r\n\r\n if (size.width === treemap.width && size.height === treemap.height) return\r\n\r\n treemap.zoom.scale(1)\r\n generator.width = size.width\r\n generator.height = size.height\r\n const layout = generator.getLayout(props.data)\r\n mapActionCreators.updateLayout(treemap, {\r\n width: generator.width,\r\n height: generator.height,\r\n data: layout,\r\n scale: treemap.scale,\r\n dataHash: treemap.dataHash,\r\n })\r\n\r\n window.scrollTo(0, 0)\r\n }, [treemap, generator, props.data])\r\n\r\n if (isMobile() && !isIpad()) return null\r\n\r\n return (\r\n \r\n )\r\n}\r\n","/* eslint-disable import/first */\r\nimport { useMutation } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\n\r\nimport { getFormattedDateString } from '../../../header/utils'\r\nimport { Share as ShareDialog } from '../../../shared/components/Share'\r\nimport { drawShareMap } from '../../../shared/drawShareMap'\r\nimport * as api from '../../services/api'\r\nimport mapStore from '../../store/mapStore'\r\nimport { MapSubtype, MapType } from '../../types'\r\nimport { useMapContext } from '../Map'\r\n\r\ninterface ShareMapProps {\r\n mapType: MapType\r\n subtype: MapSubtype\r\n className?: string\r\n}\r\n\r\nexport function Share(props: ShareMapProps) {\r\n const { treemap } = useMapContext()\r\n const uploadImage = useMutation(api.uploadMap)\r\n\r\n const onShareClick = React.useCallback(async () => {\r\n if (!treemap) return\r\n const canvas = mapStore.getPublishCanvas()\r\n const data = await drawShareMap(canvas, [props.mapType.name, props.subtype.label, getFormattedDateString()])\r\n\r\n if (data) {\r\n uploadImage.mutate({ type: treemap.type, subtype: treemap.subtype, data })\r\n }\r\n }, [props.mapType, props.subtype, treemap, uploadImage])\r\n\r\n return \r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface TopbarProps {\r\n className?: string\r\n navContent?: React.ReactNode\r\n mapControls?: React.ReactNode\r\n}\r\n\r\nexport function Topbar(props: React.PropsWithChildren) {\r\n return (\r\n
    \r\n {props.navContent && (\r\n
    \r\n {props.navContent}\r\n
    \r\n )}\r\n
    {props.children}
    \r\n {props.mapControls}\r\n
    \r\n )\r\n}\r\n","import { useQuery, useQueryClient } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\n\r\nimport { FALLBACK_PERF_RESPONSE } from '../constants/constants'\r\nimport * as api from '../services/api'\r\nimport { MapDataRoot, MapSubtypeId, MapTypeId, PerfData } from '../types'\r\nimport * as mapUtils from '../utils'\r\n\r\nexport type MapDataHookReturn = ReturnType\r\n\r\n/**\r\n * Hook which fetches map data and perf data from the api\r\n */\r\nexport function useMapData(\r\n type: MapTypeId,\r\n subtype: MapSubtypeId,\r\n cacheBuster: number,\r\n mapBaseData?: MapDataRoot,\r\n initialPerf?: PerfData,\r\n fetchBaseData = api.mapBaseData,\r\n fetchPerfData = api.mapPerf\r\n) {\r\n const queryClient = useQueryClient()\r\n const dataVersion = React.useRef()\r\n const prevType = React.useRef()\r\n\r\n React.useEffect(() => {\r\n if (mapBaseData) {\r\n const perfData = mapUtils.parseInitDataAsPerf(mapBaseData)\r\n queryClient.setQueryData(['mapPerf', type, subtype], perfData)\r\n prevType.current = type\r\n } else if (initialPerf) {\r\n queryClient.setQueryData(['mapPerf', type, subtype], initialPerf)\r\n prevType.current = type\r\n }\r\n // This effect only needs to run on mount, otherwise we’d be overriding the data\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n /**\r\n * Fetch base data and perf data for the map. We cannot use `useQueries` here,\r\n * because `keepPreviousData` doesn’t work as it creates new objects every time.\r\n */\r\n const baseDataQuery = useQuery({\r\n queryKey: ['mapBaseData', type, cacheBuster],\r\n queryFn: () => fetchBaseData(type, cacheBuster),\r\n initialData: !prevType.current ? mapBaseData : undefined,\r\n cacheTime: Infinity,\r\n staleTime: Infinity,\r\n })\r\n\r\n const perfDataQuery = useQuery({\r\n queryKey: ['mapPerf', type, subtype],\r\n queryFn: async () => {\r\n const data = await fetchPerfData(type, subtype)\r\n\r\n return (\r\n data ??\r\n queryClient.getQueryData(['mapPerf', type, subtype]) ?? {\r\n ...FALLBACK_PERF_RESPONSE,\r\n version: dataVersion.current,\r\n }\r\n )\r\n },\r\n // Keep previous data if the map type hasn’t changed\r\n keepPreviousData: prevType.current === type,\r\n refetchInterval: () => mapUtils.getMapsRefreshInterval(),\r\n staleTime: 1000,\r\n onSuccess(data) {\r\n if (!dataVersion.current && data) {\r\n dataVersion.current = data.version\r\n }\r\n\r\n if (dataVersion.current !== data?.version) {\r\n window.location.reload()\r\n return\r\n }\r\n\r\n prevType.current = type\r\n },\r\n })\r\n\r\n const data = React.useMemo(() => {\r\n if (!perfDataQuery.data || !baseDataQuery.data) return undefined\r\n\r\n const [restoredData] = mapUtils.restoreDataKeys([baseDataQuery.data], perfDataQuery.data)\r\n\r\n return restoredData\r\n }, [baseDataQuery.data, perfDataQuery.data])\r\n\r\n return {\r\n data,\r\n baseDataQuery,\r\n perfDataQuery,\r\n }\r\n}\r\n","import { useLocation } from 'react-router-dom'\r\n\r\nimport { MAP_TYPES } from '../constants/constants'\r\nimport { MapSubtypeId } from '../types'\r\n\r\n/**\r\n * Hook which gets the current map type and subtype from the URL\r\n */\r\nexport function useMapType() {\r\n const query = new URLSearchParams(useLocation().search)\r\n const typeFromQuery = query.get('t')\r\n const subtypeFromQuery = query.get('st')\r\n\r\n const type = MAP_TYPES.find((t) => t.type === typeFromQuery) ?? MAP_TYPES[0]\r\n const subtypes = type.subtypes.flatMap((type) => type.items)\r\n const subtype =\r\n subtypes.find((subtype) => subtype.value === subtypeFromQuery) ??\r\n subtypes.find((subtype) => subtype.value === MapSubtypeId.DayPerf) ??\r\n subtypes[0]\r\n\r\n return { type, subtype }\r\n}\r\n","import classnames from 'classnames'\r\nimport { NavLink } from 'react-router-dom'\r\n\r\nimport { Delayed } from '../../../main/components/delayed'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport * as tracking from '../../shared/tracking'\r\nimport { MAP_TYPES } from '../constants/constants'\r\nimport { MapSubtypeId, MapTypeId } from '../types'\r\n\r\ninterface MapTypeProps {\r\n activeType: MapTypeId\r\n activeSubtype: MapSubtypeId\r\n isLoading: boolean\r\n linkClassName?: string\r\n}\r\n\r\nexport function MapTypeList(props: MapTypeProps) {\r\n const linkClass = props.linkClassName ?? ''\r\n\r\n return (\r\n
      \r\n {MAP_TYPES.map((map) => {\r\n const isActiveTreemap = props.activeType === map.type\r\n const query = new URLSearchParams({ t: map.type })\r\n if (props.activeSubtype !== MapSubtypeId.DayPerf) {\r\n query.append('st', props.activeSubtype)\r\n }\r\n\r\n return (\r\n
    • \r\n \r\n classnames('text-xs leading-7', {\r\n [linkClass]: !isActiveTreemap,\r\n 'text-white font-bold': isActiveTreemap,\r\n })\r\n }\r\n onClick={() => {\r\n document.title = map.pageTitle\r\n tracking.trackPageView({ query: `t=${map.type}` })\r\n }}\r\n >\r\n \r\n {map.name}\r\n {isActiveTreemap && props.isLoading && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nimport { Button } from '../../main/components/button'\r\nimport { DefaultErrorBoundary } from '../../main/components/error-view'\r\nimport { Paragraph } from '../../main/components/typography'\r\nimport { AdTag, useInvestingChannelAds } from '../shared/components/Ads'\r\nimport * as tracking from '../shared/tracking'\r\nimport { Map, useMapContext } from './components/Map'\r\nimport { MapSelect } from './components/MapSelect'\r\nimport { MapTypeList } from './components/MapTypeList'\r\nimport { SearchInput, SearchResult, useSearch } from './components/Search'\r\nimport { Topbar } from './components/Topbar'\r\nimport { Expand } from './components/Topbar/Expand'\r\nimport { Share } from './components/Topbar/Share'\r\nimport { Zoom } from './components/Topbar/Zoom'\r\nimport { useMapData } from './hooks/use-map-data'\r\nimport { useMapType } from './hooks/use-map-type'\r\nimport { MapDataRoot, MapSubtypeId, PerfData } from './types'\r\nimport * as mapUtils from './utils'\r\n\r\nconst linkClassName = 'text-link hover:text-white'\r\n\r\nexport interface MapInitProps {\r\n initData?: MapDataRoot\r\n initialPerf?: PerfData\r\n cacheBuster: number\r\n generate?: boolean\r\n}\r\n\r\nfunction App(props: MapInitProps) {\r\n const { treemap } = useMapContext()\r\n const navigate = useNavigate()\r\n const { type, subtype } = useMapType()\r\n const mapData = useMapData(type.type, subtype.value, props.cacheBuster, props.initData, props.initialPerf)\r\n const search = useSearch()\r\n // Make sure all ads are refreshed on type/subtype change (page navigation)\r\n const hasInvestingChannelAds = useInvestingChannelAds([type, subtype])\r\n\r\n /**\r\n * Set new subtype to be false on perf data load so we don’t display loading state when fetching\r\n * new perf data for the same type\r\n */\r\n const [isNewSubtype, setIsNewSubtype] = React.useState(false)\r\n React.useEffect(() => {\r\n if (!mapData.perfDataQuery.isFetching) {\r\n setIsNewSubtype(false)\r\n }\r\n }, [mapData.perfDataQuery.isFetching])\r\n\r\n const isLoadingInitialBaseData = !mapData.baseDataQuery.isPreviousData && mapData.baseDataQuery.isLoading\r\n const isLoadingInitialPerf = !mapData.perfDataQuery.isPreviousData && mapData.perfDataQuery.isLoading\r\n const isInitialLoading = isLoadingInitialBaseData || isLoadingInitialPerf\r\n const isFetchingNewPerf = isNewSubtype && !mapData.perfDataQuery.isLoading && mapData.perfDataQuery.isFetching\r\n\r\n return (\r\n <>\r\n \r\n

    View

    \r\n \r\n \r\n \r\n }\r\n mapControls={\r\n <>\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n }\r\n >\r\n \r\n {type.description}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n

    Map Filter

    \r\n \r\n
    \r\n {\r\n const query = new URLSearchParams(window.location.search)\r\n if (item.value === MapSubtypeId.DayPerf) {\r\n query.delete('st')\r\n } else {\r\n query.set('st', item.value)\r\n }\r\n\r\n setIsNewSubtype(true)\r\n const stringQuery = query.toString()\r\n navigate({ pathname: window.location.pathname, search: stringQuery }, { replace: true })\r\n tracking.trackPageView({ query: stringQuery })\r\n }}\r\n />\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
      \r\n {search.results.map((result) => (\r\n \r\n ))}\r\n
    \r\n\r\n {hasInvestingChannelAds && (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n\r\n \r\n
    \r\n \r\n {hasInvestingChannelAds && }\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default App\r\n","import * as ReactDOM from 'react-dom'\r\n\r\nimport App, { MapInitProps } from './App'\r\nimport { MapContext } from './components/MapContext'\r\n\r\nwindow['FinvizInitCanvas'] = async function initCanvas(props: MapInitProps) {\r\n const root = document.getElementById('root')\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n root\r\n )\r\n}\r\n","import ReactDOM from 'react-dom'\r\n\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport Canvas from './components/Canvas'\r\nimport { MAP_SUBTYPE_DAY_PERF } from './constants/constants'\r\nimport { SettingsSmall, SettingsSmallDark, SettingsSmallGeo, SettingsSmallGeoDark } from './constants/settings'\r\nimport Treemap from './treemap'\r\nimport { MapTypeId, PerfData } from './types'\r\nimport * as mapUtils from './utils'\r\n\r\nconst CANVAS_WIDTH = 400\r\nconst CANVAS_HEIGHT_GEO = 235\r\nconst CANVAS_HEIGHT = 300\r\nconst CANVAS_HEIGHT_NEW = 368\r\n\r\nasync function renderTreemaps(props: { perfDataSec: PerfData; perfDataGeo: PerfData; cacheBuster: number }) {\r\n let precomputedData\r\n try {\r\n precomputedData = await mapUtils.fetchBaseData(\r\n FinvizSettings.hasRedesignEnabled ? 'hp_redesign.json' : 'hp.json',\r\n props.cacheBuster\r\n )\r\n } catch {\r\n return\r\n }\r\n\r\n if (props.perfDataSec) {\r\n const subtype = MAP_SUBTYPE_DAY_PERF\r\n const scale = { id: subtype.scaleId, name: subtype.label, tooltip: subtype.tooltip }\r\n const initData = mapUtils.getMapData(precomputedData.sec, props.perfDataSec)\r\n const treemap = new Treemap({\r\n data: initData,\r\n scale,\r\n width: CANVAS_WIDTH,\r\n height: FinvizSettings.hasRedesignEnabled ? CANVAS_HEIGHT_NEW : CANVAS_HEIGHT,\r\n countIndustryPerf: false,\r\n countSectorPerf: true,\r\n settings: FinvizSettings.hasDarkTheme ? SettingsSmallDark : SettingsSmall,\r\n type: MapTypeId.Sector,\r\n subtype: subtype.value,\r\n isSmall: true,\r\n zoomLevels: [1],\r\n version: props.perfDataSec.version,\r\n dataHash: props.perfDataSec.hash,\r\n })\r\n\r\n window.FinvizIndexSecMap = treemap\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('treemap-small')\r\n )\r\n }\r\n\r\n if (props.perfDataGeo) {\r\n const subtype = MAP_SUBTYPE_DAY_PERF\r\n const scale = { id: subtype.scaleId, name: subtype.label, tooltip: subtype.tooltip }\r\n const initData = mapUtils.getMapData(precomputedData.geo, props.perfDataGeo)\r\n const treemap = new Treemap({\r\n data: initData,\r\n scale,\r\n width: CANVAS_WIDTH,\r\n height: CANVAS_HEIGHT_GEO,\r\n countIndustryPerf: true,\r\n countSectorPerf: false,\r\n settings: FinvizSettings.hasDarkTheme ? SettingsSmallGeoDark : SettingsSmallGeo,\r\n type: MapTypeId.World,\r\n subtype: subtype.value,\r\n isSmall: true,\r\n zoomLevels: [1],\r\n version: props.perfDataGeo.version,\r\n dataHash: props.perfDataGeo.hash,\r\n })\r\n\r\n window.FinvizIndexGeoMap = treemap\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('treemap-small-geo')\r\n )\r\n }\r\n}\r\n\r\nif (document.getElementById('map-data')) {\r\n const mapProps = parseJSONFromScript<{ perfDataSec: PerfData; perfDataGeo: PerfData; cacheBuster: number }>(\r\n 'map-data'\r\n )\r\n if (mapProps) renderTreemaps(mapProps)\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as tracking from '../tracking'\r\n\r\nexport const IC_PUBLISHER_ID = 'df0d0d52-cc7f-11e8-82a5-0abbb61c4a6a'\r\n\r\nenum AdTagName {\r\n IC_TickerInContent = 'IC_D_3x3',\r\n IC_MapsLeftRail = 'IC_D_125x125',\r\n IC_Statements = 'IC_D_300x60',\r\n IC_Groups = 'IC_D_300x250',\r\n}\r\n\r\nconst tagDefinition = {\r\n [AdTagName.IC_TickerInContent]: { placements: 3, style: { width: 970, minHeight: 250 } },\r\n [AdTagName.IC_MapsLeftRail]: { placements: 2, style: { width: 125, minHeight: 125 } },\r\n [AdTagName.IC_Statements]: { placements: 1, style: { width: 300, minHeight: 60 } },\r\n [AdTagName.IC_Groups]: { placements: 1, style: { width: 336, minHeight: 280 } },\r\n}\r\n\r\nconst hasInvestingChannelAds = tracking.getAdsProvider() === tracking.AdsProvider.InvestingChannel\r\n\r\n/**\r\n * Get create/destroy methods to control ads insertion\r\n */\r\nexport function getInvestingChannelPage() {\r\n var page: ICPageReturn\r\n\r\n function create() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n let config = window['FINVIZ_IC_UAT_CONFIG'] ?? {}\r\n page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID, config)\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n function destroy() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n page?.destroy()\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n return { create, destroy }\r\n}\r\n\r\n/**\r\n * Hook which recreates ads on deps change (SPA navigation,…)\r\n */\r\nexport function useInvestingChannelAds(deps: unknown[] = []) {\r\n React.useLayoutEffect(() => {\r\n const page = getInvestingChannelPage()\r\n\r\n page.create()\r\n\r\n return () => page.destroy()\r\n // eslint cannot statically check the dependencies and complains about it\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps)\r\n\r\n return hasInvestingChannelAds\r\n}\r\n\r\ninterface AdTagProps extends Omit, 'name'> {\r\n /**\r\n * Name of the ad tag\r\n */\r\n name: keyof typeof AdTagName\r\n\r\n /**\r\n * Manually set the placement position for this tag\r\n *\r\n * @default 1\r\n */\r\n position?: number\r\n\r\n /**\r\n * Additional class names for the wrapper div\r\n */\r\n className?: string\r\n}\r\n\r\nexport function AdTag({ name, position = 1, ...props }: AdTagProps) {\r\n const tagName = AdTagName[name]\r\n const tagProps = tagDefinition[tagName]\r\n const placementName = `${tagName}_${Math.min(Math.max(position, 1), tagProps.placements)}`\r\n\r\n if (!hasInvestingChannelAds) return null\r\n\r\n return
    \r\n}\r\n","/* eslint-disable import/first */\r\nimport { UseMutationResult } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\nimport { FacebookIcon, FacebookShareButton, TwitterIcon, TwitterShareButton } from 'react-share'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { CopyToClipboard } from '../../../main/components/copy-to-clipboard'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogDismiss,\r\n DialogFooter,\r\n DialogHeader,\r\n useDialogState,\r\n} from '../../../main/components/dialog'\r\nimport { ErrorView } from '../../../main/components/error-view'\r\nimport { Loading } from '../../../main/components/loading'\r\nimport { Heading } from '../../../main/components/typography'\r\n\r\ninterface ShareResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\ninterface ShareProps {\r\n state: UseMutationResult\r\n onShareClick: () => void\r\n className?: string\r\n disabled?: boolean\r\n}\r\n\r\nexport function Share(props: ShareProps) {\r\n const dialogState = useDialogState()\r\n\r\n return (\r\n <>\r\n {\r\n props.onShareClick()\r\n dialogState.show()\r\n }}\r\n >\r\n Share map\r\n \r\n\r\n \r\n Share map\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\ninterface ShareDialogBodyProps {\r\n isError: boolean\r\n isLoading: boolean\r\n data?: ResponseType\r\n}\r\n\r\nfunction ShareDialogBody(props: ShareDialogBodyProps) {\r\n if (props.isLoading) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n\r\n if (props.isError || !props.data) {\r\n return (\r\n
    \r\n \r\n There’s been an error sharing the map.\r\n
    \r\n Please try sharing the map again and if the problem persists, please contact support.\r\n \r\n }\r\n />\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {document.title}\r\n
    \r\n \r\n Copy and paste link in email, website, or forum\r\n \r\n }\r\n text={props.data.shareUrl}\r\n bottomLeftContent={\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n />\r\n
    \r\n \r\n )\r\n}\r\n","import logoBase64 from './assets/logo.png'\r\nimport { getTextFontFamily } from './getTextFontFamily'\r\nimport { isFirefoxDesktop } from './isMobile'\r\nimport { loadImage } from './loadImage'\r\nimport { getScaleRatio } from './retinafy'\r\n\r\nexport async function drawShareMap(canvasEl: HTMLCanvasElement, text: string[]) {\r\n const fontFamily = getTextFontFamily()\r\n\r\n const ratio = getScaleRatio()\r\n const width = canvasEl.width / ratio\r\n const height = canvasEl.height / ratio\r\n\r\n const canvas = document.createElement('canvas')\r\n const context = canvas.getContext('2d', isFirefoxDesktop() ? { willReadFrequently: true } : undefined)!\r\n canvas.width = width\r\n canvas.height = height + 22\r\n\r\n // Background\r\n context.fillStyle = '#fff'\r\n context.fillRect(0, 0, width, height)\r\n\r\n // Logo\r\n const logo = await loadImage(logoBase64)\r\n context.drawImage(logo, 2, 4)\r\n\r\n // Labels\r\n const label = text.map((t) => t.toUpperCase())\r\n let x = width\r\n const y = 11\r\n\r\n context.textBaseline = 'middle'\r\n context.textAlign = 'right'\r\n context.font = '9pt ' + fontFamily\r\n for (let i = label.length - 1; i >= 0; i--) {\r\n const text = label[i]\r\n let textWidth = context.measureText(text).width\r\n\r\n context.fillStyle = '#4c5261'\r\n context.fillText(text, x, y)\r\n\r\n if (i > 0) {\r\n const divider = ' • '\r\n context.fillStyle = '#5faaf4'\r\n context.fillText(divider, x - textWidth, y)\r\n textWidth = textWidth + context.measureText(divider).width\r\n }\r\n\r\n x = x - textWidth\r\n }\r\n\r\n context.drawImage(canvasEl, 0, 0, width * ratio, height * ratio, 0, 22, width, height)\r\n\r\n return canvas.toDataURL()\r\n}\r\n","export function parseJSONFromScript(id: string, doc: Document = document): T | null {\r\n const el = doc.getElementById(id)\r\n const isValidElement = el && el.tagName === 'SCRIPT' && el.getAttribute('type') === 'application/json'\r\n\r\n if (!isValidElement) {\r\n window.Sentry?.captureMessage('parseJSONFromScript', {\r\n extra: {\r\n el: el ? 'yes' : 'no',\r\n tagName: el?.tagName,\r\n type: el?.getAttribute('type'),\r\n },\r\n })\r\n }\r\n\r\n if (!isValidElement) return null\r\n\r\n try {\r\n return JSON.parse(el.textContent!)\r\n } catch (e) {\r\n Sentry.captureException(e)\r\n return null\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import { link } from '../services/routing'\r\nimport { Delayed, DelayedProps } from './delayed'\r\nimport { ErrorView } from './error-view'\r\nimport { Spinner } from './spinner'\r\n\r\ntype LoadingProps = Pick\r\n\r\nexport function Loading({ delay, timeout, throwOnTimeout }: LoadingProps) {\r\n return (\r\n \r\n There’s been an error loading the application.\r\n
    \r\n Please make sure your internet connection is stable and refresh the page. If the error persists, please{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n }\r\n />\r\n }\r\n >\r\n \r\n \r\n )\r\n}\r\n\r\nexport function LoadingScreen(props: LoadingProps) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
    {children}
    \r\n
    \r\n {actions ?? (\r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n"],"names":["MapContext","props","_jsx","MapContextProvider","children","QueryClientContext","React","fallback","className","Loading","BrowserRouter","filterItems","input","arguments","length","undefined","filter","stock","name","indexOf","description","toUpperCase","sort","a","b","slice","useSearch","treemap","useMapContext","value","setValue","results","setResults","nodes","onInputChange","event","target","onItemClick","node","cx","x","dx","cy","y","dy","diffX","width","diffY","height","MapActionCreators","zoomAndTranslate","getLastZoomLevel","setHoveredNode","mapNodeId","onResultMouseLeave","SearchInput","Input","theme","rounding","placeholder","leftContent","onChange","SearchResult","_ref","result","onClick","onMouseLeave","_jsxs","Button","size","classnames","contentClass","Expand","generator","onExpand","data","_window$gtag","_window","document","body","classList","contains","EXPANDED_MAP_BODY_CLASSS","remove","window","gtag","call","event_category","add","containerElement","getElementById","mapUtils","type","isSmall","zoom","scale","layout","getLayout","mapActionCreators","updateLayout","dataHash","scrollTo","isMobile","isIpad","Share","uploadImage","useMutation","api","onShareClick","async","canvas","mapStore","getPublishCanvas","drawShareMap","mapType","subtype","label","getFormattedDateString","mutate","ShareDialog","state","disabled","Topbar","navContent","mapControls","useMapData","cacheBuster","mapBaseData","initialPerf","fetchBaseData","fetchPerfData","queryClient","useQueryClient","dataVersion","prevType","perfData","setQueryData","current","baseDataQuery","useQuery","queryKey","queryFn","initialData","cacheTime","Infinity","staleTime","perfDataQuery","getQueryData","FALLBACK_PERF_RESPONSE","version","keepPreviousData","refetchInterval","onSuccess","location","reload","restoredData","useMapType","_MAP_TYPES$find","_subtypes$find","query","URLSearchParams","useLocation","search","typeFromQuery","get","subtypeFromQuery","MAP_TYPES","find","t","subtypes","flatMap","items","MapSubtypeId","DayPerf","MapTypeList","_props$linkClassName","linkClass","linkClassName","map","isActiveTreemap","activeType","activeSubtype","append","NavLink","to","concat","title","pageTitle","tracking","isLoading","Delayed","Spinner","_mapData$perfDataQuer","navigate","useNavigate","mapData","initData","hasInvestingChannelAds","useInvestingChannelAds","isNewSubtype","setIsNewSubtype","isFetching","isLoadingInitialBaseData","isPreviousData","isLoadingInitialPerf","isInitialLoading","isFetchingNewPerf","_Fragment","as","href","Zoom","Paragraph","MapSelect","comboBox","item","delete","set","stringQuery","toString","pathname","replace","inputClass","AdTag","position","ErrorBoundary","resetKeys","FallbackComponent","DefaultErrorBoundary","Map","isFetchingPerf","isLoadingData","hash","onNodeClick","id","root","ReactDOM","App","mapProps","parseJSONFromScript","precomputedData","FinvizSettings","hasRedesignEnabled","perfDataSec","MAP_SUBTYPE_DAY_PERF","scaleId","tooltip","sec","Treemap","countIndustryPerf","countSectorPerf","settings","hasDarkTheme","SettingsSmallDark","SettingsSmall","MapTypeId","Sector","zoomLevels","FinvizIndexSecMap","Canvas","hover","legend","alt","perfDataGeo","geo","SettingsSmallGeoDark","SettingsSmallGeo","World","FinvizIndexGeoMap","renderTreemaps","IC_PUBLISHER_ID","AdTagName","tagDefinition","IC_TickerInContent","placements","style","minHeight","IC_MapsLeftRail","IC_Statements","IC_Groups","InvestingChannel","getInvestingChannelPage","page","create","_window$InvestingChan","InvestingChannelQueue","push","_window$FINVIZ_IC_UAT","_window$InvestingChan2","config","UAT","Run","e","console","error","destroy","_window$InvestingChan3","_page","deps","tagName","tagProps","placementName","Math","min","max","dialogState","useDialogState","show","Dialog","DialogHeader","DialogBody","ShareDialogBody","isError","DialogFooter","DialogDismiss","ErrorView","showRefresh","message","src","imgUrl","CopyToClipboard","Heading","level","text","shareUrl","bottomLeftContent","FacebookShareButton","url","FacebookIcon","round","TwitterShareButton","via","TwitterIcon","canvasEl","fontFamily","getTextFontFamily","ratio","getScaleRatio","createElement","context","getContext","isFirefoxDesktop","willReadFrequently","fillStyle","fillRect","logo","loadImage","logoBase64","drawImage","textBaseline","textAlign","font","i","textWidth","measureText","fillText","divider","toDataURL","el","isValidElement","getAttribute","_window$Sentry","Sentry","captureMessage","extra","JSON","parse","textContent","captureException","delay","timeout","throwOnTimeout","delayComponent","timeoutComponent","visible","setVisible","hasTimedOut","setHasTimedOut","visibilityTimeout","setTimeout","failedTimeout","Error","clearTimeout","showContact","link","toContact","LoadingScreen","NotificationPosition","NotificationContext","hide","useNotification","NotificationWrapper","isOpen","setIsOpen","notification","setNotification","viewport","setViewport","useVisualViewport","enabled","element","options","getVisualViewport","visualViewport","positionClass","_notification$options","BottomLeft","TopLeft","TopRight","includes","BottomRight","WrapperComponent","inline","Ariakit","Provider","role","unmountOnHide","open","onClose","modal","backdrop","focusable","hideOnEscape","hideOnInteractOutside","autoFocusOnShow","autoFocusOnHide","transform","left","top","willChange","withNotificationContext","WrappedComponent","_WrappedComponent$dis","displayName","WithNotificationContext","notificationContext","Notification","closeText","actions","timeoutInMs","timeoutId","_visualViewport$width","_visualViewport$heigh","_visualViewport$scale","_visualViewport$offse","_visualViewport$offse2","innerWidth","innerHeight","offsetTop","offsetLeft","unscaledWidth","unscaledHeight","onScroll","_window$visualViewpor","_window$visualViewpor2","handleChange","throttle","ev","currentTarget","addEventListener","_window$visualViewpor3","_window$visualViewpor4","removeEventListener"],"sourceRoot":""}